'use strict';

const express = require('express');
const moment = require('moment');
const router = express.Router();
const { jwtSign } = require('@/utils/jwt');
const { filePath } = require('../configPath');
const user_file_path = filePath('klein-web-data/_user_db.json');
const {
  Read2WriteFile,
  ReadFile,
  WriteFile,
  Success,
  Error,
} = require('@/utils/utils');
const { Hash, ComHash } = require('@/utils/crypto');

/**
 * 登录
 */
router.post('/web/login', async (req, res) => {
  // TODO：做逻辑操作

  // 1、获取登录名和密码
  const { username, password } = req.body;
  console.log(username, password);

  let result = null;

  // 2、校验用户名和密码
  if (username && password) {
    try {
      // 3、查询用户信息
      const data = await ReadFile(user_file_path);

      // 4、判断用户是否存在
      if (data.length > 0) {
        let msg = null;
        // 5、查找用户数据
        const findUser = data.find((item) => item.username === username);

        if (findUser) {
          // 6、判断密码是否正确
          if (ComHash(password, findUser.password)) {
            const { uid, username, update_time } = findUser;
            findUser.last_time = update_time; // 更新最后登录时间
            findUser.login_times++; // 更新登录次数
            findUser.update_time = moment().format('YYYY-MM-DD HH:mm:ss'); // 更新登录时间

            try {
              await WriteFile(user_file_path, data);
            } catch (error) {
              return;
            }

            msg = jwtSign({ _uid: uid, _username: username });
          } else {
            msg = '密码错误';
          }
        } else {
          msg = '用户不存在';
        }
        result = Success(req, msg);
      } else {
        result = Error(req, '该用户不存在，请注册');
      }
    } catch (err) {
      result = Error(req, err);
    }
  } else {
    result = Error(req, '缺少参数，前端请检查');
  }
  return res.send(result);
});

// 登出
router.get('/web/logout', (req, res) => {
  res.send(Success(req, '退出成功'));
});

/**
 * 注册
 */
router.post('/web/register', async (req, res) => {
  // TODO 注册逻辑操作
  let result = null;
  // 1、获取参数
  const {
    username,
    password,
    nickname,
    email,
    phone,
    role,
    sex,
    id_card,
    address,
  } = req.body;

  // 2、校验用户名和密码
  if (username && password) {
    // 默认用户信息
    const info = {
      uid: 'uid000000', // 用户UID
      number: 0, // 用户序号
      username: username, // 账号
      password: Hash(password), // 密码
      update_password_times: 0, // 更新密码次数
      nickname: nickname || '', // 用户昵称
      avatar: '', // 头像
      email: email || '', // 邮箱
      phone: phone || '', // 电话
      role: role || [], // 角色权限
      sex: sex || '', // 性别code
      sex_name: '', // 性别name
      id_card: id_card || '', // 身份证号
      icon_url: '',
      birthday: '', // 生日
      address: address || '', // 地址
      create_time: '', // 首次注册日期
      last_time: '', // 上次登录日期
      update_time: '', // 登录日期
      login_times: 0, // 登录次数
    };

    info.create_time = moment().format('YYYY-MM-DD HH:mm:ss');
    info.update_time = moment().format('YYYY-MM-DD HH:mm:ss');

    try {
      const data = await ReadFile(user_file_path);
      if (data && data.length === 0) {
        // TODO 还没有用户注册 需自定义内容

        // 保存用户信息
        await Read2WriteFile(user_file_path, info);
        result = Success(req, '注册成功，请登录');
      } else {
        // TODO 判断用户是否已注册
        const findUser = data.find((item) => item.username === username);
        const maxn = Math.max(...data.map((n) => n.number));

        if (!findUser) {
          // TODO 需自定义内容
          info.number = maxn + 1;
          info.uid = `uid${String(info.number).padStart(6, '0')}`;

          // 保存用户信息
          await Read2WriteFile(user_file_path, info);
          result = Success(req, '注册成功，请登录');
        } else {
          result = Success(req, '该用户已注册，请登录');
        }
      }
    } catch (err) {
      result = Error(req, err);
    }
  } else {
    result = Error(req, '缺少参数，前端请检查');
  }
  return res.send(result);
});

router.get('/user/:name', (req, res) => {
  res.send(Success(req.params.name, '获取成功'));
});

/**
 * 重置密码
 */
router.put('/reset/password', (req, res) => {
  console.log(req, res);
});

/**
 * 重置头像
 */
router.put('/reset/avatar', (req, res) => {
  console.log(req, res);
});

module.exports = router;

// commonJS
// const express = require('express');
// const router = express.Router();

// router.get('/common', async (req, res) => {
//   console.log(req.query);
//   res.send(req.query);
// });

// module.exports = router;

// ES6
// import express from 'express';
// const router = express.Router();

// router.get('/es6', (req, res) => {
//   res.send(req, query);
// })

// export default router;
